Vendée Globe 2020-2021

Le projet se déroule du vendredi 20 auu 30 lundi novembre 2020.

Librairies

Conda environment

Import des données - Scraping

Plusieurs types de données sont accesibles en ligne :

Participants et fiches techniques des bateaux

On crée un DataFrame de données sur la base du dictionnaire scrapé depuis le site du Vendée Globe. Ce dataframe sera preprocessé dans un second temps, afin d'étudier plus finement chaque variable extraite.

Pickle du DataFrame

Classements

Dernier classement disponible

Dans un premier temps, je récupère les informations relatives au dernier classement disponible. Ces informations sont scrappées directement depuis la page web du site du Vendée Globe. Comme pour les informations techniques des bateaux, le preprocessing des données se fait dans une deuxième temps.

Historique de tous les classements

Pour effectuer des analyses sur la totalité de la course, je récupère de manière automatisée tous les classements historiques publiés depuis le 1er jour, c'est à dire 6 classements par jour depuis le 8 Novembre 2020.
Cette méthode permet de ne pas avoir à télécharger chaque nouveau fichier excel publié sur le site du Vendée Globe.
Comme pour le DataFrame des informations techniques des bateaux, ces données seront préprocessées dans un second temps.

Pickle du DataFrame

Preprocessing

Les données techniques des bateaux et les données du classement de la course ont été importées de manière automatisée (si le site se met à jour, on exécute la fonction de scrapping pour avoir les données les plus fraîches, sans passer par un fichier excel). Avant d'analyser les données obtenues, assurons nous de la cohérence des formats, qualité de données, etc.

Load DataFrames

Participants et fiches techniques des bateaux

Les données des participants et des bateaux sont des données statiques, i.e elles n'évolueront pas en fonction de la progression de la course, ni en fonction du classement. On peut donc traiter les données une fois pour toutes.

Une vision générale de nos données nous indique que :

Numéro de voile

Le champ "Numéro de voile" est une information importante puisqu'il donne le trigramme associé au pays. On remarque que cette colonne n'est pas complète dans le DataFrame des données. En effet, il manque parfois l'information du pays, et pour un Skipper (Thomas RUYANT), aucune donnée n'a été scrapée).
Pour compléter les informations manquantes, je me base sur un des fichiers excel de classements, dans lequel ce champ est complété correctement pour tous les bateaux. Il est toutefois nécessaire d'effectuer des traitements sur les noms de ce fichier (notamment retirer les accents), afin de ne pas biaiser les jointures.
J'harmonise également le nom de Samantha Davies, parfois orthographié 'Sam Davies'.

Tirant d'eau, longueur du bateau et hauteur de mât

Les champs "Tirant d'eau", "longueur du bateau" et "hauteur de mât" ne sont théoriquement pas discriminants, puisqu'ils sont définis de manière réglementaire et chaque courreur doit se conformer aux valeurs suivantes :

Néanmoins, la course du Vendée Globe applique la "Grand father rule" qui permet aux participants possédant un bateau construit avant la mise en place des règles ci-dessus, de concourrir sans changer de matériel.
Observons les données de l'édition 2020, afin de vérifier si pour ces éléments techniques, la "Grand father rule" s'applique. Si c'est le cas, on ne supprimera pas le champs de notre jeu de données, puisqu'il apportera de l'information.

Tous les bateaux possèdent le même tirant d'eau (4,50m) et la même longeur (18,28m). En revanche, certains bateaux ont une hauteur de mât plus petite que les 29mètres maximums réglementaires. Il est donc nécessaire de conserver ce champ qui est discriminant pour une partie des courreurs de cette édition.

Surfaces de voile

Après vérification, toutes les données sont en $m^{2}$. On peut donc formatter ces colonnes pour obtenir un type Int.

Largeur, hauteur du mât

Les valeurs dont l'unité est le mètre peuvent être converties en Float dans notre jeu de données.

Déplacement (poids) et Voile quille

Il y a deux bateaux pour lesquels le poids n'est pas renseigné sur le site du Vendée Globe. Afin de compléter ces valeurs, observons le poids moyen des bateaux dont la quille est construite dans le même matériau. Cela donnera en effet, une idée approchée des poids manquants.

Le matériau de la quille du bateau CORUM L'EPARGNE n'étant pas renseigné, j'ai repris le matériau qui avait été communiqué en 2019 (https://www.corum.fr/actus/le-demoulage-de-la-coque-du-futur-bateau-corum-lepargne-en-images) : Carbone.

Modifions la fonction de preprocessing pour prendre en compte les valeurs ci-dessus, et compléter les champs manquants dans nos données.

Date de lancement

Le champ Date est pour le moment converti en DateTime. Par la suite, on pourra par exemple se concentrer sur l'année de construction du bateau.

Architecte

L'architecte du bateau peut jouer un rôle important dans la course et on peut supposer que les choix de ceux-ci en termes de matériaux utilisés et présence de certains éléments (foils notamment), pourraient faire la différence dans la course.
Dans les données scrappées, le libellé pour l'architecte n'est pas homogénéisé, on retrouve notamment plusieurs fois les noms VPLP et Verdier, associés différement (ou encore Bruce Farr design ortographié de plusieurs manières). Le nettoyage de ce champ va nécessiter quelques associations manuelles.

Pipeline

Toutes les fonctions de preprocessing ont été définies ci-dessus. Nous pouvons maintenant les appliquer grâce à une fonction 'pipeline'. On s'assurera que le nombre d'entrées dans notre table est bien le même qu'initialement.

Pickle du dataframe clean

Classements

Comme pour les informations techniques des bateaux, il est nécessaire de preprocesser les données avant qu'elles soient utilisables pour les analyses.

Latitude et Longitude

Les latitudes et longitudes de chaques participants au fil de la course peuvent être exploitées pour avoir un aperçu graphique de l'avancement des courreurs sur une carte du monde. Pour cela, il est nécessaires que les coordonnées soient dans un format exploitable par la fonction string2latlon.

Skipper

On formate la casse pour le champ 'Skipper' en vue des jointures à venir avec la table des informations techniques des bateaux. On note au passage que dans la table des classements, les noms des skippers sont avec accents. Cela ne devrait pas poser de problème puisque nous avons conservé deux versions des noms dans la table des infos techniques ; avec et sans accents. Cependant, après quelques tests, je réalise que certains noms ne sont pas accentués de la même manière. Je décide donc de retirer les accents des noms du tableau de classements.
De plus, un des skipper n'a pas de nom (uniquement un prénom) dans la table des classements : "Alan". En regardant les valeurs depuis les informations techniques, on remarque qu'il s'agit d'Alan Roura. On complète donc son nom.
Comme pour les données techniques des bateaux, le nom de Samantha Davies est harmonisé.

Date

Champs numériques

La plupart des informations relatives aux classements sont des champs numériques, dont l'unité peut être le kilomètre/h, le kilomètre, le noeud marin, etc.
On utilise une fonction permettant de ne garder que la partie numérique (sans l'unité) de chaque champs, afin de transformer les données dans un format exploitable. Les champs concernés sont :

Foil

Pour faciliter les traitements à venir, on change le type de champ Foil en integer.

Pipeline

Comme pour le preprocessing des fiches techniques des bateaux, on automatise le preprocessing des données de classement via un pipeline regroupant toutes les fonctions définies ci-dessus. De cette manière, l'ajout ou la suppression d'une tâche de preprocessing est facilitée.

Pickle du dataframe clean

Cartes de la course

Carte générale interactive

Nous avons importé les longitudes et latitudes, enregistrées 6 fois par jour depuis le début de la course, pour tous les participants. Affichons les trajectoires des bateaux sur une carte du monde, afin d'avoir un aperçu des routes de chacuns.
Le code est enregistré dans un fichier .py à part (repris en annexe).

Ci-dessous, un exemple d'affichage du résultat (30-11-2020).
J'ai choisi d'afficher quelques informations utiles sur chaque participant, lorsque l'utilisateur passe sa souris sur une trace.

En annexe, la trajectoire de Jérémie Beyou, qui après quelques jours de navigation a du retourner au point de départ suite à un problème technique (avant de repartir de plus belle dans la course voir graphique des distances cumulées parcourues par les skippers).

La légende est triée par position des participants dans la course. Celle-ci permet une sélection de certains participants en particulier, en cliquant sur les noms des skippers.
Ci-dessous j'ai selectionné quelques participants de la course, bien et moins bien classés (en date du 30-11-2020), afin d'avoir un aperçu de la différence des routes choisies par les participants.

Il est intéressant de voir la trajectoire prise par les navigateurs pour contourner l'anticyclone de St Hélène. En effet, ceux-ci ont tout intérêt à ne pas couper directement ver le Cap de Bonne Espérance, ce qui les ferait naviguer face au vent. Il s'agit de trouver la trajectoire idéale ; le contourner assez loin pour ne pas tomber dans les zones de calme au milieu de l'anticyclone, mais pas trop loin pour éviter d'augmenter considérablement la distance à parcourir.
Les skippers étant arrivés à des dates différentes autour de l'anti-cyclone, ils ont du adapter leur stratégie de navigation en fonction de l'évolution de celui-ci. Certains ont décidé de passer proche du coeur de l'anti-cyclone, ce qui généralement est une zone de vents faibles. D'autres, arrivés plus tard, ont choisit de contourner par l'Ouest, augmentant la distance à parcourir, mais pouvant potentiellement bénéficier d'un second anti-cyclone venant du Brésil, souvent avantageux en terme de vent.

Projections sur différentes vues

Afin d'observer l'avancée de la course sous des angles différents, j'ai choisi de représenter les trajectoires des 3 premiers skippers dans le classement, ainsi que les 3 derniers (voir légende). Pour cela :

Ces cartes ne sont pas interactives comme le sont celles ci-dessus.
Le code permettant de générer ces cartes est également repris en annexe.

Analyse des données

Nous avons extrait les données techniques relatives aux bateaux, ainsi que celles des classements des participants au fur et à mesure de la course. Nous avons également créé des pipelines de preprocessing afin d'automatiser les retraitements des données à chaque mise à jour des informations du site web du Vendée Globe.
Nous avons construit une carte des routes empruntées par chaque participant, afin d'avoir un aperçu de la progression de la course.
Nous pouvons désormais analyser plus finement les données et les corrélations qui peuvent exister entre les informations que nous avons retenues. Nous pouvons par exemple chercher si certaines caractéristiques techniques des bateaux offrent un avantage significatif aux participants.

Load des dataframes pickles

Tableau des abandons

Au fur et à mesure que la course progresse, des problèmes techniques peuvent contraindrent les skippers à abandonner le Vendée Globle. Ci-dessous, les navigateurs n'étant plus dans la course, avec leur position au moment de l'abandon.
Note : Alex Thomson a abandonné la course, mais les informations sur le site du Vendée Globe ne sont pas encore à jour. Il apparaîtra dans le tableau dès que celles ci auront été modifiées.

Impacts des spécificités techniques sur les données moyennes du classement

Observons les impacts des spécificités techniques sur les données moyennes du classement pour chaque participant :

Corrélation VMG-position

En croisant les informations techniques des bateaux et celles du classement, on peut dégager des intuitions à propos des éléments favorables ou défavorables aux participants de la course.
Ci-dessous, on regarde la position moyenne de chaque participant sur la durée totale de la course (depuis le 1er jour jusqu'aujourd'hui), et on y associe la VMG moyenne sur la même période.
La VMG donne une indication entre la vitesse du bateau et l'angle du CAP. Un skipper qui voudra aller le plus rapidement d'un point A à un point B, devra trouver le meilleur compris entre l'angle de sa trajectoire pour rester au plus proche du vent, et sa vitesse en noeuds. Dans l'exemple ci-dessous, la VMG est maximisée pour une angle de 50°. Le bateau parcourt une distance plus grande, mais il a le compromis idéal entre distance et vitesse. Sa VMG est donc maximale (source https://www.orange-marine.com/content/474-bien-comprendre-le-principe-de-la-vmg-a-la-voile).

Graphiquement, on constate une forte corrélation entre valeur élevée de VMG et bonne position dans le classement. Les participants qui ont le plus occupé les 1ères positions du classement, sont les participants dont les bateaux permettent une VMG la plus élevée.

Nous pouvons dès lors nous demander ce qui permet d'avoir une valeur de VMG élevée.
Quels sont les éléments techniques du bateau qui permettent de tels scores ? Est-ce dû à l'architecte du bateau, à la présence de foil, à la taille des voiles, etc ?

Impact de la présence d'un foil

Note : Le champ 'Nombre de dérives', présent dans la table des classements, donne une indication quant à la présence d'un foil. Mais dans les données scrapées pour les informations techniques, nous avons également récupéré un champ 'Foil', mieux renseigné, qui indique la présence ou l'absense de foil par 1 ou 0. Après s'être assuré de la cohérence des 2 champs, on prend celui le mieux renseigné pour la suite.

Nous avions vu qu'une VMG élevée était corrélée à une meilleure position en moyenne dans le classement. Si on différencie désormais les participants dont le bateau est équipé d'un foil, de ceux dont le bateau ne l'est pas, on constate qu'il existe un avantage majeur à utiliser un foil. En effet, celui-ci permet d'augmenter en moyenne sa VMG, et on retrouve donc la corrélation entre VMG élevée et bon classement.

Finalement, effectuons une simple régression linéraire entre les valeurs de VMG en moyenne pour les participants, et leur position moyenne dans le classement.
Les résultats ci-dessous permettent de distinguer clairement la relation linéaire entre ces 2 variables. Plus la VMG est élevée, meilleure est la position dans le classement.
Les pentes des droites de régression donnent un résultat interressant, puisqu'on voit que, si les bateaux équipés de foil ont tendance à avoir une VMG plus élevée que les autres, ces derniers, lorsqu'ils atteignent des valeurs de VMG suffisamment grande, ont tendance à obtenir de meilleures positions.

Impacts de l'année de création du bateau

Observons s'il existe un lien entre l'année de création du bateau et la position des skippers dans le classement. En effet, on pourrait supposer que les bateaux récents disposent des dernières technologies et donc seraient plus performants.
Pour cela, nous allons commencer par regarder le nombre de bateaux construits par année, ce qui nous donnera une information quant au caractère récent des voiliers de la course.

La faible volumétrie du nombre de bateaux par années nous empêche de tirer des conclusions pertinentes. En effet, il semble que les bateaux les plus récents (i.e date de lancement > 2007) permettent d'atteindre des VMG plus élevées en moyenne et donc de meilleures position dans le classement, mais nous avons également constaté que la plupart des bateaux de la course ont été construits après 2007.

Distances parcourues par les skippers

Au delà des trajectoires que nous avons pu voir sur les différentes cartes, il peut être intéressant de regarder l'évolution de la distance parcourue par participant et par date. De cette manière, nous pourrons distinguer si certains participants accélèrent et prennent de l'avance.
Ainsi on peut remarquer que le skipper Jérémie Beyou, qui avait du retourner au point de départ de la course (cf problème technique), parcourt une distance considérable en quelques jours, jusqu'à une position pas si éloignée de ses adversaires autour du 25 novembre.

Vitesse moyenne par jour

En plus de la distance parcourue, nous pouvons regarder en parallèle la vitesse des skippers, afin d'avoir une vision plus 'dynamique' de la course.
On peut voir qu'à partir 21 Novembre, la courbe de distance parcourue à tendance à s'applatir, et on constate que la vitesse moyenne quotidienne diminue fortement pour tous les skippers (jusque là, la vitesse moyenne avait été plutôt constante, voir en progression au fur et à mesure de l'avancement de la course).

Prédictions

J'essaye dans un premier de construire un modèle linéaire permettant, sur la base des données techniques des bateaux et sur les données de course depuis son départ, de prédire la position moyenne d'un skipper dans les 5 jours à venir. Aux données existantes, j'ajoute des données calculées afin de compléter les informations. Ces données sont les suivantes pour chaque skipper :

Ensuite, je découpe mon jeu de données de course, en prenant les informations depuis le début de la course, jusqu'à 5 jours avant la date actuelle. Puis j'essaye de prédire les positions des skippers sur ces 5 derniers jours de course, et je compare mes résultats avec les données effectivement récoltées ces 5 derniers jours.

Dans un second temps, j'utilise un modèle de séries temporelles 'ARIMA' afin d'obtenir une prédiction du classement des skippers 80 jours après le début de la course. La limite de 80 est prise arbitrairement, sur la base des temps moyens des recors des éditions précédents (entre 85 et 75 jours pour les meilleurs).
Ce modèle n'est qu'une ébauche et ne tient pas compte de nombreux paramètres pouvant influencer la course. Par exemple, l'information d'abandon de certains skippers n'est pas prise en compte à l'heure actuelle. Pour optimiser le système, il serait également intéressant d'étudier de plus près la modélisation de la VMG en fonction du temps.

Régression Linéaire

Feature engineering

Model

Prédictions

Graphiques

On voit que si la prédiction ne s'écart pas énormément des posistions réelles constatées pour les skippers, il existe néanmoins un "bruit" permanent.
En l'état, cette prédiction n'a pas énormément de valeur, puisque les données de course ne sont pas utilisées pour prédire une position lointaine dans le futur.

Séries temporelles

Le modèle de série temporelle attribue un score à chacun des skippers. Ensuite ce score est convertit en rang, afin d'obtenir une vision à 80 jours (après le début de la course) du classement des skippers.

Model

Prédiction du classement à 80 jours après le départ

Annexes

Carte interactive de la course
Contenu du fichier _plotrace.py

Trajectoire de Jérémie Beyou

Suite à un problème technique après quelques jours de navigation, Jérémie Beyou retourne au point de départ, avant de repartir de plus belle dans la course.

Projection sur carte orthographique

Projection sur carte depuis le pôle Sud